package com.ryh.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Set;

/**
 * @ClassName RedisUtil
 * @Description redis访问工具
 * @Author RaoYH
 */
@Component
public class RedisUtil {
    /**
     * 在Spring-redis.xml配置文件中创建JedisPool对象，并配置redis信息
     */
    @Autowired
    private JedisPool jedisPool;

    /**
     * 获取连接
     *
     * @return
     */
    private Jedis getResource() {

        return jedisPool.getResource();
    }

    /**
     * 存储
     *
     * @param key
     * @param value
     */
    public byte[] set(byte[] key, byte[] value) {
        Jedis jedis = getResource();
        //可能会抛异常,所以使用try finally 在finally中关闭连接
        try {
            jedis.set(key, value);
            return value;
        } finally {
            jedis.close();
        }
    }

    /**
     * 设置指定的key的指定超时时间单位为秒
     *
     * @param key
     * @param ii
     */
    public void expire(byte[] key, int i) {
        Jedis jedis = getResource();
        //可能会抛异常,所以使用try finally 在finally中关闭连接
        try {
            jedis.expire(key, i);
        } finally {
            jedis.close();
        }
    }

    /**
     * 获取值
     *
     * @param key
     * @return
     */
    public byte[] get(byte[] key) {
        Jedis jedis = getResource();
        //可能会抛异常,所以使用try finally 在finally中关闭连接
        try {
            return jedis.get(key);
        } finally {
            jedis.close();
        }
    }

    /**
     * 删除key
     *
     * @param key
     */
    public void del(byte[] key) {
        Jedis jedis = getResource();
        //可能会抛异常,所以使用try finally 在finally中关闭连接
        try {
            jedis.del(key);
        } finally {
            jedis.close();
        }
    }

    /**
     * 通过前缀获取所有的key
     * @param session_prefix
     * @return
     */
    public Set<byte[]> keys(String session_prefix) {
        Jedis jedis = getResource();
        //可能会抛异常,所以使用try finally 在finally中关闭连接
        try {
            return jedis.keys((session_prefix + "*").getBytes());
        } finally {
            jedis.close();
        }
    }
}
